It is often necessary in the electronic arts to evaluate expressions of the general form given in Eq. (1): EQU X=F*C (1)
where X, F and C are matrices or a combination of matrices and vectors.
It is known that such expressions can be evaluated by means of the following equation: ##EQU1## where i, j and p are indices. Examples of such functions are the Forward Discrete Cosine Transform (FDCT) and the Inverse Discrete Cosine Transform (IDCT) and Two Dimensional Discrete Fourier Transform (2-d DFT), and general matrix multiplication. Operations of the type illustrated by Eq. 2 are referred to generally as a Multiply-Accumulate, abbreviated as MA.
Because of the importance of MA operations in modern electronics, especially in communication electronics, there is an ongoing need for means and methods which permit MA operations to be carried out more quickly or with fewer resources or both. For example, it desirable to be able to perform such operations with simpler or more compact or higher speed microelectronic circuits or less on-chip memory or combinations of such advantages. It is especially desirable to be able to evaluate MA expressions such as Eqs. (1)-(2) using data scaling so that various quantities can be evaluated and manipulated more easily.
Computation of multiplications in the NORMAL domain can effectively be carried out as additions in the logarithmic domain. Then, all factors of the NORMAL domain have to be converted into the LOG domain. This is typically done by a LOG converter. The words "NORMAL domain" refer to real or complex numbers in any desired representation. The words "LOG domain" refer to numbers which are expressed in logarithmic notation and having a mantissa and exponent. Any basis can be used for the logarithms but base two is preferred.
Logarithmic converters are devices used to implement logarithmic functions and are most commonly found in items such as hand-held calculators and spread sheet software programs. Logarithmic functions, or LOG functions, belong to a class of mathematical functions called transcendental functions which are important in wide variety applications such as data communications, control systems, chemical processes, and computer simulation. A LOG function is abbreviated with the following mathematical equation: y=log.sub.b (x). In this equation, x represents an input value which can be any number greater than or equal to zero; b represents a base number system; and y represents a logarithm value, or LOG value, which corresponds to the input value x.
Several techniques of computing LOG are commonly used today. A technique involves storing a corresponding LOG value in a look-up table for every possible input value. This approach allows a LOG value to be computed relatively quickly and is practical for applications requiring limited precision and having input values within a small domain. However, in many applications this technique is impractical because it requires too great a memory space to store the look-up table. For example, in a digital system using an IEEE standard 32-bit floating point number, which has a 23-bit mantissa, such a look-up table would be required to store 2.sup.23 LOG values--one for every possible mantissa value. A computer memory for storing this number of LOG values would be prohibitively expensive, if not impossible, to build.
Another technique of computing LOG values involves computing a power series to approximate a LOG function. An example of a power series which approximates a LOG function is given as: EQU y=Log(1+x)=x-x.sup.2 /2+x.sup.3 /3-x.sup.4 /4+ (3)
In this example, the LOG function is a specific type of LOG function known as a natural logarithm, which is widely used in science and engineering applications. The variables in Eq. (3) are defined as follows: y represents a LOG value, and x represents an input value in the domain -1.ltoreq.x&lt;1. Although the technique of using a power series to approximate a LOG function allows a LOG value to be computed with a high degree of precision, it requires a large number of computer operations and therefore requires a relatively long period of time to execute. In other words, this technique is generally slow and negatively affects the throughput of a computer.
As used herein, the words "scaling" or "scaled" refer to multiplying or dividing a value or a series of values by a constant. Data which is subjected to "scaling" is said to have been "scaled".
In many applications there is a need to perform scalar multiplication of each input value of a large number of input values with a constant value. In digital signal processing (DSP) such scaling transformations are used for level adaption or in processing of video images, quantization scaling transformations are used for mapping a number space of a certain width to one of a different width. There is a need to perform such scalar multiplication in a very short time. As used herein the words "data" or "input data" or "output data" and the like are intended to refer to any type of quantity representable as a numerical value, irrespective of its physical significance. Thus, "data" includes coefficients, measurements, logical flags, and any other type information or constraint.